#include <stdio.h>
#include <stdbool.h>
#include <string.h>

//如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后，短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
//字母和数字都属于字母数字字符。
//给你一个字符串 s，如果它是 回文串 ，返回 true ；否则，返回 false 。

bool isPalindrome(char* s)
{
	if(s==NULL)
    return false;
	char *p=s;
	while(*(p+1)!=0)
    p++;
	while(s<p)
    {
		while(s<p&&!(*s>='a'&&*s<='z'||*s>='A'&&*s<='Z'||*s>='0'&&*s<='9'))s++;
		while(s<p&&!(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'||*p>='0'&&*p<='9'))p--;
		if(*s>='A'&&*s<='Z')*s+=32;
		if(*p>='A'&&*p<='Z')*p+=32;
		if(*p!=*s)return false;
		p--;
		s++;
	}
	return true;
}


// bool judge(char c)
// {
//     if(c >= 48 && c <= 57 || c >= 97 && c <= 122)
//         return true;
//     else
//         return false;
// }

// bool isPalindrome(char* s) 
// {
//     int left = 0;
//     int right = strlen(s)-1;
//     for(int i = 0; i < strlen(s); i++)
//     {
//         if(s[i] >= 'A' && s[i] <= 'Z')
//             s[i] += 32;
//     }
//     if(right == 0)
//         return true;
//     while(left < right)
//     {
//         while(left < right && !judge(s[left]))
//             left++;
//         while(left < right && !judge(s[right]))
//             right--;

//         if(left < right )
//         {
//             if(s[left] != s[right])
//             {
//                 return false;
//             }

//         }
//         left++;
//         right--;
//     }
//     return true;
// }

// int main()
// {
//     char s[30] =  "A man, a plan, a canal: Panama";
//     printf("%d\n",isPalindrome(s));
// }